/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Datos;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;


public class Factura implements Printable{

    private PrinterJob job;
    private String tipoLetra; // EJEMPLOS: SERIF, ARIAL, CALIBRI
    private int tamañoLetra; // PARA ADAPTARLO A LO QUE OCUPEMOS
    private Font letra; //SE SACA CON EL TAMAÑO Y EL TIPO
    private String [] textoArriba;
    private String [] textoAbajo;
    private String [] textoOrdenes;

    public Factura() {
    }

    public Factura(String[] textoArriba, String[] textoAbajo, String[] textoOrdenes, String tipoLetra, int tamañoLetra) {
        this.textoArriba = textoArriba;
        this.textoAbajo = textoAbajo;
        this.textoOrdenes = textoOrdenes;
        this.tipoLetra = tipoLetra;
        this.tamañoLetra = tamañoLetra;
        this.letra = new Font(tipoLetra, Font.PLAIN, tamañoLetra);
        this.job = null;
    }

    public String[] getTextoAbajo() {
        return textoAbajo;
    }

    public void setTextoAbajo(String[] textoAbajo) {
        this.textoAbajo = textoAbajo;
    }

    public String[] getTextoArriba() {
        return textoArriba;
    }

    public void setTextoArriba(String[] textoArriba) {
        this.textoArriba = textoArriba;
    }

    public String[] getTextoOrdenes() {
        return textoOrdenes;
    }

    public void setTextoOrdenes(String[] textoOrdenes) {
        this.textoOrdenes = textoOrdenes;
    }

    protected void init() {
       job = PrinterJob.getPrinterJob();
    }

    public void imprimirFactura() throws PrinterException
    {
        if (job == null) {
            init();
        }
        if (!job.printDialog()) {
        }
        else
        {
            System.out.println("2");
            job.setPrintable(this);
            job.print();
            job = null;
        }
    }
    
//POSIBLE DE IMPLEMENTAR LUEGO, PONE LÍMITE AL NÚMERO MÁXIMO DE CARACTERES POR LÍNEA   
   /**
    * Initialize the print job, and return the base number of
    * characters per line with the established font size and
    * font.  This is really just a guess, because we can't
    * get the font metrics yet.
    */
//   public int getCharsPerLine() {
//       if (job == null) {
//           init();
//       }
//       PageFormat pf;
//       pf = job.defaultPage();
//       double width = pf.getImageableWidth(); // in 72nd of a pt
//       double ptsize = typeFont.getSize();
//       double ptwid = ptsize * 3 / 4;
//       double cnt = (width / ptwid);
//       return (int)(Math.round(cnt));
//   }

    public int print(Graphics graphics,PageFormat pageFormat,int pageIndex)throws PrinterException
    {
        if (pageIndex != 0) {
            return NO_SUCH_PAGE;
        }
        System.out.println("3");
        FontMetrics fm;
        graphics.setFont(letra);
        graphics.setColor(Color.black);
        fm = graphics.getFontMetrics();

        System.out.println("4");
        int i;
        System.out.println("5");
        double x, y; //DATOS DEL FORMAT LOS SACA DEL DIALOGO DEL OS
        System.out.println("6");
        x = pageFormat.getImageableX();
        System.out.println("7");
        y = pageFormat.getImageableY() + fm.getMaxAscent();
        System.out.println("8");

        if (textoArriba != null) {
            System.out.println("9");
            graphics.setFont(letra);
            System.out.println("10");
            for(i = 0; i < textoArriba.length; i++) {
                graphics.drawString(textoArriba[i],(int)x, (int)y);
                System.out.println("12");
                y += fm.getHeight();
                System.out.println("13");
            }
            System.out.println("11");
        }

        System.out.println("5");
        if (textoOrdenes != null) {
            graphics.setFont(letra);
            for(i = 0; i < textoOrdenes.length; i++) {
                graphics.drawString(textoOrdenes[i],(int)x,(int)y);
                y += fm.getHeight();
            }
        }

        System.out.println("6");
        if (textoAbajo != null) {
            graphics.setFont(letra);
            for(i = 0; i < textoAbajo.length; i++) {
                graphics.drawString(textoAbajo[i],(int)x,(int)y);
                y += fm.getHeight();
            }
        }

        System.out.println("7");

        return PAGE_EXISTS;
    }

}
